package dao;

import util.PinyinUtil;

import java.io.File;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Objects;

//这个类的实例就代表file_meta 表中的每个记录
public class FileMeta {
    private int id;
    private String name;
    private String path;
    private boolean isDirectory;
    //下面两个属性，在Java代码中，可以没有，它们两个都是根据上面的name属性来的
//    private String pinyin;
//    private String pinyinFirst;
    private long size;

    private long lastModified;

    public FileMeta(String name, String path, boolean isDirectory, long size, long lastModified) {
        this.name = name;
        this.path = path;
        this.isDirectory = isDirectory;
        this.size = size;
        this.lastModified = lastModified;
    }
    public FileMeta(File f){
        this(f.getName(),f.getParent(),f.isDirectory(),f.length(),f.lastModified());
    }
    public String getPinyin(){
        return PinyinUtil.get(name,true);
    }
    public String getPinyinFirst(){
        return PinyinUtil.get(name,false);
    }
    public String getSizeText(){
        //利用这个方法把size的值进行单位换算，变成更易读的结果
        //单位主要有四个  Byte  KB  MB  GB
        //由于单个文件不太可能达到TB，这里只看这四个
        double curSize = size;
        String[] units = {"Byte","KB","MB","GB"};
        for (int i = 0; i < units.length; i++) {
            if (curSize<1024){
                //不用再进行换算了，直接使用当前i对应的单位即可
                return String.format("%.2f"+units[i],new BigDecimal(curSize));
            }
            curSize /= 1024;
        }
        return String.format("%.2f GB",new BigDecimal(curSize));
    }

    public String getLastModifiedFlied(){
        //格式化时间的字符串
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(lastModified);
    }


    @Override
    public boolean equals(Object o){
        if (this == o){
            //看看是不是自己和自己比较
            return true;
        }
        if (o == null){
            //针对o为空的特殊处理
            return false;
        }
        if (getClass() != o.getClass()){
            //比较类型
            return false;
        }
        FileMeta fileMeta = (FileMeta)o;
        return name.equals(fileMeta.name)&&path.equals(fileMeta.path)
                &&isDirectory== fileMeta.isDirectory;
    }
    //当前是已经重写了equals了，很多java相关的编程规范，都建议重写hashCode
    //因为两个对象如果equals为true，此时他们得到的hashCode也应该是相同的
    //但是此处代码中，不屑hashCode也不是不行，毕竟当前不需要把FileMeta放到哈希表里

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public boolean isDirectory() {
        return isDirectory;
    }

    public void setDirectory(boolean directory) {
        isDirectory = directory;
    }

    public long getSize() {
        return size;
    }

    public void setSize(long size) {
        this.size = size;
    }

    public long getLastModified() {
        return lastModified;
    }

    public void setLastModified(long lastModified) {
        this.lastModified = lastModified;
    }

}
